一站式压测平台实践
简介
一站式压测平台是基于开源压测工具的基础上,结合公司的业务需要,面向研发同学的一款集压测流程管控,压测任务管理、自动化性能基线为一体的一站式压测平台。
产生背景
时间成本:单次压测临时申请施压机,增加时间成本和金钱成本。且多次压测采用不同的环境压测,结果不具有对比性。
数据成本:脚本、测试数据、压测机器、测试报告无法沉淀
流程带来的风险成本:生产压测缺乏平台流程管控,无管控的线上测试是一个非常有风险的操作。
自动化问题:自动化性能基线无统一平台支撑
基于这些因素,随着大家对压测诉求的逐步增多,我们决定推进压测的平台化建设。这篇我们主要介绍压测平台的建设和实践。
业务架构:
重点功能介绍:
生产压测流程管控模块
压测流程管控流程图:
通过以上流程操作,做到生产压测有审核、实施有通知、结果透明化。
压测管理模块
实现脚本、参数文件、报告数据的汇总。
压测时可结合公司监控系统查看被压机器指标。
在线脚本编辑模块
说明:提取出压测实施过程中经常变动的参数,支持常用参数的实时修改。
通过动态调整以上参数,达到以下效果:
1)随时调整压测并发及压测时长。
2)随机变化压测参数文件
3)控制不同取样器的压测速率及压测比例
4)支持梯度压测模式
5)随时调整压测机器等等
共享压测机器模块
新增节点示意图:
自动化性能基线模块
性能基线结果展示:
基线的结果分为三块数据:
1)应用指标数据
2)机器的负载表现数据
3)若接口为异步接口,则还有队列的关键指标数据。
1)应用指标数据
趋势图展示:
列表阈值对比图:
机器负载展示图:
异步队列指标展示图:(红色覆盖的为异步任务名)
通过自动触发或手动触发性能基线的运行,自动将结果推送给敏捷组成员。后续又增加了发现性能问题自动提BUG功能。达到平时性能基线用例静默运行,发现问题时自动提交性能bug的效果。
bug截图:
平台实现及推广使用中遇到的问题:
1)大并发压测,压测机性能的问题
问题现象:基于大并发如涉及到搜索、网关、存储类的压测需求,对施压机的性能要求很高。怎么保证施压机的性能,以便更好的压测。
解决办法:1)引入共享压测机器模块。目前支持了K8S节点的随时新增和KVM、ECS机器的新增功能。保证大并发压测情况下施压机器的性能。
2)接入公司监控,配置报警项。平台上可以随时查看施压机器的性能。
2)自动化性能基线用例构造数据耗时长的问题
问题现象:自动化性能测试用例,需要构造数据,那么自动化性能测试需要的数据量要比功能测试需要的数据量多很多,如何在一定程度上解决造数据的时间成本
解决办法:将压测平台与导流平台打通,通过线上或者线下导流,自动化生成符合压测或自动化需要的脚本。且可推送到压测平台。
3)监控实时性要求
问题现象:压测时需要实时对被测应用及其他相关中间件或存储进行性能监控,那么如何让压测实施人员更方便的进行监控到所需要监控的数据。
解决办法:压测平台监控界面结合公司中间件产品Tetris监控平台,测试实施人员可以根据自己的需求,随机增加需要关注的监控界面。
4)支持自定义jar包
问题现象:目前有些同学的性能基线用例,需要使用自定义jar包。这涉及到类加载机制或者jar包拷贝的策略。
解决办法:若使用类加载机制就可能导致同学生成的jar包影响性能基线的核心功能的稳定性,最终采取了jar包拷贝和删除机制。当进行跑某个性能基线用例时,判断是否存在jar包存在则拷贝到对应的目录下,跑完即可删除。
目前平台还存在不少问题,需要我们持续不断地优化和改进。
平台收益:
1)单次压测时间缩短了约30%左右,二次压测时间缩短了约80%左右。
2)自平台上线以来,平台已有260个压测场景 ,产生有效压测报告约2500个。
3)通过平台埋点数据可以看到压测平台每日PV或UV。下图为平台的PV量。
4)无人值守的自动化性能基线测试,已经覆盖了80%需要接入的核心应用。这个功能将一定程度上在无单次性能测试的时候,自动化发现一些潜在性能问题。
5)线上压测有章可循,通过将生产压测流程融入到压测平台,无需再进行人工管控,从一定让压测更有序,降低压测引起线上故障概率。
后续规划:
1、基于中间件压测实现自动化压测
2、平台实现弹性扩容
3、智能化分析及预警
压测平台建设的最终目的是提升压测效能及产出。